//
//  SIViewController.m
//  Gunterapple
//
//  Created by 热带雨林 on 2021/1/27.
//  Copyright © 2021 热带雨林. All rights reserved.
//

#import "SIViewController.h"
#import "GDHeader.h"
#import "GDExtern.h"

//static void test(){
//    NSLog(@"HH");
//}

//static 相对于整个类而言 值可以更新
static NSString *name = @"nihao";
static int age = 20; //静态全局变量


/**
 声明 静态全局只读常量
 */
static const int num = 20;
static int const numII = 30;

/**
 内联函数通常都是比较简单的代码片段，不能包含循环，递归
 */
static inline int add(int a, int b){
    return a * b;
}


@interface SIViewController ()
/**
 仅仅是在其他文件中定义过了，先在当前文件查找有没有全局变量，没有找到，才会去其他文件查找
 */
extern NSString *testID;

@end

@implementation SIViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    [self test];
    [self testII];
    [self testIII];
//    [self testIIII];
}
- (void)test{
    /**
     不会修改变量的作用域，只会修改变量的生命周期
     */
    static int age = 10;//静态局部变量
    age++; //静态局部变量可以修改
    NSLog(@"%d",age); //输出的是静态局部变量的值s
}
- (void)testII{
    age++;//修改全局静态变量 其他地方使用全局静态变量输出的也是更新后的值
    NSLog(@"%d",age);//输出的仍然是静态全局变量的值
    //使用静态内联函数
//    add(3,5);
    NSLog(@"%d",add(3, 5));
}
- (void)testIII{
    NSLog(@"%d",age);
//    num++;
//    NSLog(@"%d",num);
    NSLog(@"%@,%@",testID,testExternID);
    testExternID = @"123456";
    NSLog(@"%@",testExternID);
    
    //全局常量，不可修改
    NSLog(@"%@",constID);
//    NSLog(@"%@",testIIID);
//    test(1, 2);  oc c++ 混编失败
    
    NSLog(@"%d %d",num,numII);
    
    /**
     注意两者区别：
     const  修饰的是key 是key只读，不允许修改
     const修饰的是*name， 则*name是只读，name是可以修改的
     */
    
    static NSString * const key = @"nihao";
//    key = @"keji";
    
    static NSString const *name = @"nihao";
    name = @"HHHHH";
    
    static const NSString *sql = @"HH";
    
    
    NSLog(@"%@ %@ %@",key,name,sql);
}

- (void)testIIII{
//    NSLog(@"%d",num);
//    NSLog(@"%@,%@",testID,testExternID);
}

//

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
